using Godot;
using System;
using System.Linq;
using 游戏设定.基类;

public partial class 背包场景 : PanelContainer
{
    [Export] private GridContainer 背包网格;
    [Export] private PackedScene 组件道具场景;

    public override void _EnterTree()
    {
        游戏管理.置组件实例("背包场景", this);
    }

    public void 置道具(C道具模型 模型)
    {
        组件道具 道具组件 = 组件道具场景.Instantiate<组件道具>();
        道具组件.Visible = true;
        道具组件.置数据(模型);
        背包网格.AddChild(道具组件);
    }

    public void 置数量(string 唯一码, int 数量)
    {
        var 道具数组 = 背包网格.GetChildren();
        for (int i = 0; i < 道具数组.Count; i++)
        {
            组件道具 道具组件 = (组件道具)道具数组[i];
            if (道具组件.取道具().唯一码 == 唯一码)
            {
                道具组件.置数量(数量);
            }
        }
    }

    public void 删道具(string 唯一码)
    {
        for (int i = 0; i < 游戏存档.背包.Count; i++)
        {
            if (游戏存档.背包[i].唯一码 == 唯一码)
            {
                游戏存档.背包.RemoveAt(i);
                break;
            }
        }
        var 道具组件组 = 背包网格.GetChildren();
        for (int i = 0; i < 道具组件组.Count; i++)
        {
            组件道具 道具组件 = (组件道具)道具组件组[i];
            C道具模型 道具 = 道具组件.取道具();
            if (道具 != null && 道具.唯一码 == 唯一码)
            {
                道具组件.QueueFree();
                return;
            }
        }
    }

    public void 更换道具(string 原道具唯一码, C道具模型 待更换的道具)
    {
        var 道具组件组 = 背包网格.GetChildren();
        for (int i = 0; i < 道具组件组.Count; i++)
        {
            组件道具 道具组件 = (组件道具)道具组件组[i];
            C道具模型 道具 = 道具组件.取道具();
            if (道具 != null && 道具.唯一码 == 原道具唯一码)
            {
                道具组件.置数据(待更换的道具);
                return;
            }
        }
    }
}
